package com.example.salesystem.controller;


import com.example.salesystem.common.ResultAjax;
import com.example.salesystem.model.Product;
import com.example.salesystem.model.pageModel.PageQuery;
import com.example.salesystem.model.pageModel.PageResult;
import com.example.salesystem.service.IProductService;
import com.sun.istack.internal.NotNull;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author lishuo
 * @since 2024-05-18
 */
@Api(tags = "商品接口")
@Slf4j
@RestController
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private IProductService productService;

    /**
     * 分页查询商品列表
     * @param pIndex
     * @param pSize
     * @return
     */
    @ApiOperation("分页查询商品列表")
    @GetMapping("/getProductsByPage")
    public ResultAjax<PageResult<Product>> getProductsByPage (
            @ApiParam("页号") @RequestParam(value = "pIndex",required = false) Integer pIndex,
            @ApiParam("每页大小") @RequestParam(value = "pSize",required = false) Integer pSize) {
        // 1.参数矫正
        if (pIndex == null || pIndex < 1) {
            pIndex = 1;
        }
        if (pSize == null || pSize < 4) {
            pSize = 4;
        }
        // 2. 封装分页查询请求
        PageQuery pageQuery = new PageQuery();
        pageQuery.setPageNo(pIndex);
        pageQuery.setPageSize(pSize);
        // 3. 调用 service 分页查询商品列表信息
        PageResult<Product> pageResult = productService.getProductsByPage(pageQuery);
        // 4. 返回结果
        return ResultAjax.succ(pageResult);
    }

    /**
     * 根据商品 Id 获取商品详情信息（由于前端商品列表和详情页类似，这里就统一处理了）
     * @param id
     * @return
     */
    @ApiOperation("获取商品信息")
    @GetMapping("/getProductInfo")
    public ResultAjax<Product> getProductInfo(@ApiParam("商品id") @RequestParam("id") @NotNull String id) {
        // 1. 查询商品详情
        Product product = productService.getById(id);
        if (product == null) {
            // 打印日志
            log.warn("商品不存在");
            // 返回错信息
            return ResultAjax.fail("商品不存在");
        }
        // 2. 返回结果
        return ResultAjax.succ(product);
    }

}
